package  src
{
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
	/**
	 * ...
	 * @author Luiz Felipe de S. Rodrigues
	 */
	public class Carro extends MovieClip
	{
		var cima : Boolean;
		var baixo : Boolean;
		var esquerda : Boolean;
		var direita : Boolean;
		var sai : Boolean;
		
		var px : Number;
		var py : Number;
		
		var velocidade : Number;
		var velocidadeMaxRe : Number;
		var aceleracao : Number;
		var freio : Number;
		var atrito : Number;
		var controle : Number;
		
		var fMotor : Number;
		var peso : Number;
		var RPM : Number;
		var topRPMtorque : Number;
		var x1 : Number;
		var marcha : Array;
		
		
		public function Carro() 
		{
			cima = false;
			baixo = false;
			esquerda = false;
			direita = false;
			
			velocidade = 0;
			velocidadeMaxRe = 2;
			aceleracao = .075;
			freio = .13;
			atrito = 100;
			controle = 7.5;
			
			Main._instance.stage.addEventListener(KeyboardEvent.KEY_DOWN, pressionada);
			Main._instance.stage.addEventListener(KeyboardEvent.KEY_UP, despressionada);
			
			addEventListener(Event.ADDED_TO_STAGE, iniciarStage);
		}
		
		public function add() : void 
		{
			
			Main._instance.stage.addEventListener(KeyboardEvent.KEY_DOWN, pressionada);
			Main._instance.stage.addEventListener(KeyboardEvent.KEY_UP, despressionada);
			
		}
		
		public function remove() : void 
		{
			cima = false;
			baixo = false;
			esquerda = false;
			direita = false;
			
			Main._instance.stage.removeEventListener(KeyboardEvent.KEY_DOWN, pressionada);
			Main._instance.stage.removeEventListener(KeyboardEvent.KEY_UP, despressionada);
			
		}
		
		public function iniciarStage(e:Event):void
		{

		}
		
		public function pressionada(e:KeyboardEvent):void
		{
			if (e.keyCode == Keyboard.UP)
			{
				cima = true;
			}
			if (e.keyCode == Keyboard.DOWN)
			{
				baixo = true;
			}
			if (e.keyCode == Keyboard.LEFT)
			{
				esquerda = true;
			}
			if (e.keyCode == Keyboard.RIGHT)
			{
				direita = true;
			}
			if (e.keyCode == Keyboard.E)
			{
				sai = true;
			}
		}
		
		public function despressionada(e:KeyboardEvent):void
		{
			if (e.keyCode == Keyboard.UP)
			{
				cima = false;
			}
			if (e.keyCode == Keyboard.DOWN)
			{
				baixo = false;
			}
			if (e.keyCode == Keyboard.LEFT)
			{
				esquerda = false;
			}
			if (e.keyCode == Keyboard.RIGHT)
			{
				direita = false;
			}
			if (e.keyCode == Keyboard.E)
			{
				Main._instance.game.level.numClick = 0;
				sai = false;
			}
		}
		
		public function mover() : void
		{
			//acelerando
			
			if (velocidade >= 0)
			{
				if (cima)
				{
					velocidade += aceleracao;
				}
				if (baixo)
				{
					velocidade -= freio;
				}
			}
			
			// acelerando re
			if (velocidade < 0)
			{
				if (cima)
				{
					velocidade += freio;
				}
				if (baixo && velocidade > -velocidadeMaxRe)
				{
					velocidade -= aceleracao;
				}
			}
			
			//atrito c/ e s/ volante
			if (!esquerda && !direita)
			{
				velocidade -= velocidade / atrito;
			}
			
			if (esquerda || direita)
			{
				velocidade -= velocidade / (0.9 * atrito);
			}
			
			//zerando velocidade
			if (velocidade > -0.3 && velocidade < 0.3 && !cima && !baixo)
			{
				velocidade = 0;
			}
			
			//volante
			if (velocidade > 0)
			{
				if (esquerda)
				{
					this.rotation -= velocidade * 1.5 * ((controle - velocidade) / controle);
				}
				if (direita)
				{
					this.rotation += velocidade * 1.5 * ((controle - velocidade) / controle);
				}
			}
			
			//volante p/ re
			if (velocidade < 0)
			{
				if (esquerda)
				{
					this.rotation -= velocidade * 1.5;
				}
				if (direita)
				{
					this.rotation += velocidade * 1.5;
				}
			}
			
			px += Math.sin(this.rotation * (Math.PI / 180)) * velocidade;
			py -= Math.cos(this.rotation * (Math.PI / 180)) * velocidade;
		}
		
	}

}